static gboolean opt_quiet;
static gboolean opt_delete;
+static gboolean opt_all;
static gboolean opt_add_tombstones;
static gboolean opt_verify_bindings;
static gboolean opt_verify_back_refs;
static GOptionEntry options[] = {
{ "add-tombstones", 0, 0, G_OPTION_ARG_NONE, &opt_add_tombstones, "Add tombstones for missing commits", NULL },
{ "quiet", 'q', 0, G_OPTION_ARG_NONE, &opt_quiet, "Only print error messages", NULL },
+ { "all", 'a', 0, G_OPTION_ARG_NONE, &opt_all, "Don't stop on first error", NULL },
{ "delete", 0, 0, G_OPTION_ARG_NONE, &opt_delete, "Remove corrupted objects", NULL },
{ "verify-bindings", 0, 0, G_OPTION_ARG_NONE, &opt_verify_bindings, "Verify ref bindings", NULL },
{ "verify-back-refs", 0, 0, G_OPTION_ARG_NONE, &opt_verify_back_refs, "Verify back-references (implies --verify-bindings)", NULL },
(void) ostree_repo_delete_object (repo, objtype, checksum, cancellable, NULL);
object_missing = TRUE;
}
+ else if (opt_all)
+ {
+ *out_found_corruption = TRUE;
+ g_printerr ("%s\n", temp_error->message);
+ }
else
{
g_propagate_error (error, g_steal_pointer (&temp_error));
set -euo pipefail
-echo "1..8"
+echo "1..9"
. $(dirname $0)/libtest.sh
filechecksum=$(ostree_file_path_to_checksum repo test2 /firstfile)
echo corrupted >> repo/$(ostree_checksum_to_relative_object_path repo $filechecksum)
+unset filechecksum
assert_not_has_file repo/state/${rev}.commitpartial
assert_has_file repo/state/${rev}.commitpartial
echo "ok corrupt file"
+
+cd ${test_tmpdir}
+rm repo files -rf
+setup_test_repository "bare"
+
+rev=$($OSTREE rev-parse test2)
+firstfilechecksum=$(ostree_file_path_to_checksum repo test2 /firstfile)
+echo corrupted >> repo/$(ostree_checksum_to_relative_object_path repo $firstfilechecksum)
+secondfilechecksum=$(ostree_file_path_to_checksum repo test2 /baz/cow)
+echo corrupted >> repo/$(ostree_checksum_to_relative_object_path repo $secondfilechecksum)
+
+assert_not_has_file repo/state/${rev}.commitpartial
+
+if $OSTREE fsck -a --delete 2>err.txt; then
+ assert_not_reached "fsck unexpectedly succeeded"
+fi
+assert_file_has_content err.txt "Corrupted file object.*${firstfilechecksum}"
+assert_file_has_content err.txt "Corrupted file object.*${secondfilechecksum}"
+assert_file_has_content_literal err.txt "Marking commit as partial: $rev"
+assert_has_file repo/state/${rev}.commitpartial
+
+echo "ok fsck --all"